package com.zuo_book.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zuo_book.common.Result;
import com.zuo_book.common.SecurityUtils;
import com.zuo_book.entity.SysTemplate;
import com.zuo_book.entity.SysTemplateBo;
import com.zuo_book.entity.SysTemplateReview;
import com.zuo_book.entity.SysTemplateStage;
import com.zuo_book.service.SysTemplateService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Objects;

/**
 * 项目模板控制器
 */
@Slf4j
@RestController
@RequestMapping("/template")
@RequiredArgsConstructor
public class SysTemplateController {

    private final SysTemplateService templateService;

    /**
     * 创建模板
     */
    @PostMapping("/create")
    public Result<Long> createTemplate(@RequestBody SysTemplateBo template) {
        // 检查当前用户是否是管理员
//        if (!Objects.equals(SecurityUtils.getCurrentUserRole(), "ADMIN")) {
//            return Result.fail("只有管理员才能创建模板");
//        }

        template.setCreateBy(SecurityUtils.getCurrentUserId());
        Long templateId = templateService.createTemplate(template);
        return Result.success(templateId);
    }

    /**
     * 更新模板
     */
    @PutMapping("/update")
    public Result<Void> updateTemplate(@RequestBody SysTemplate template) {
//        // 检查当前用户是否是管理员
//        if (!Objects.equals(SecurityUtils.getCurrentUserRole(), "ADMIN")) {
//            return Result.fail("只有管理员才能更新模板");
//        }

        templateService.updateTemplate(template);
        return Result.success();
    }

    /**
     * 删除模板
     */
    @DeleteMapping("/delete/{templateId}")
    public Result<Void> deleteTemplate(@PathVariable Long templateId) {
        // 检查当前用户是否是管理员
//        if (!Objects.equals(SecurityUtils.getCurrentUserRole(), "ADMIN")) {
//            return Result.fail("只有管理员才能删除模板");
//        }

        templateService.deleteTemplate(templateId);
        return Result.success();
    }

    /**
     * 获取模板详情
     */
    @GetMapping("/info/{templateId}")
    public Result<SysTemplate> getTemplateInfo(@PathVariable Long templateId) {
        SysTemplate template = templateService.getTemplateById(templateId);
        return Result.success(template);
    }

    /**
     * 分页查询模板列表
     */
    @GetMapping("/page")
    public Result<Page<SysTemplate>> pageTemplates(
            @RequestParam(defaultValue = "1") int page,
            @RequestParam(defaultValue = "10") int size,
            @RequestParam(required = false) String keyword,
            @RequestParam(required = false) String category,
            @RequestParam(required = false) String isReview) {

        Page<SysTemplate> templatePage = templateService.listTemplates(page, size, keyword, category,isReview);
        return Result.success(templatePage);
    }

    /**
     * 添加模板阶段
     */
    @PostMapping("/stage/add")
    public Result<Long> addTemplateStage(@RequestBody SysTemplateStage stage) {
        // 检查当前用户是否是管理员
        if (Objects.equals(SecurityUtils.getCurrentUserRole(), "ADMIN")) {
            return Result.fail("只有普通用户才能上传模板");
        }

        Long stageId = templateService.addTemplateStage(stage);
        return Result.success(stageId);
    }

    /**
     * 更新模板阶段
     */
    @PutMapping("/stage/update")
    public Result<Void> updateTemplateStage(@RequestBody SysTemplateStage stage) {
        // 检查当前用户是否是管理员
//        if (!Objects.equals(SecurityUtils.getCurrentUserRole(), "ADMIN")) {
//            return Result.fail("只有管理员才能更新模板阶段");
//        }

        templateService.updateTemplateStage(stage);
        return Result.success();
    }

    /**
     * 删除模板阶段
     */
    @DeleteMapping("/stage/delete/{stageId}")
    public Result<Void> deleteTemplateStage(@PathVariable Long stageId) {
        // 检查当前用户是否是管理员
//        if (!Objects.equals(SecurityUtils.getCurrentUserRole(), "ADMIN")) {
//            return Result.fail("只有管理员才能删除模板阶段");
//        }

        templateService.deleteTemplateStage(stageId);
        return Result.success();
    }

    /**
     * 获取模板所有阶段
     */
    @GetMapping("/stage/list/{templateId}")
    public Result<List<SysTemplateStage>> getTemplateStages(@PathVariable Long templateId) {
        List<SysTemplateStage> stages = templateService.getTemplateStages(templateId);
        return Result.success(stages);
    }

    /**
     * 添加模板评价
     */
    @PostMapping("/review/add")
    public Result<Long> addTemplateReview(@RequestBody SysTemplateReview review) {
        // 设置当前用户ID
        Long currentUserId = SecurityUtils.getCurrentUserId();
        review.setUserId(currentUserId);

        // 检查用户是否已购买模板
        if (!templateService.hasUserPurchasedTemplate(currentUserId, review.getTemplateId())) {
            return Result.fail("您尚未购买该模板，无法评价");
        }

        Long reviewId = templateService.addTemplateReview(review);
        return Result.success(reviewId);
    }

    /**
     * 获取模板评价列表
     */
    @GetMapping("/review/page/{templateId}")
    public Result<Page<SysTemplateReview>> pageTemplateReviews(
            @PathVariable Long templateId,
            @RequestParam(defaultValue = "1") int page,
            @RequestParam(defaultValue = "10") int size) {

        Page<SysTemplateReview> reviewPage = templateService.listTemplateReviews(templateId, page, size);
        return Result.success(reviewPage);
    }

    /**
     * 购买模板
     */
    @PostMapping("/purchase/{templateId}")
    public Result<Boolean> purchaseTemplate(@PathVariable Long templateId) {
        Long currentUserId = SecurityUtils.getCurrentUserId();
        boolean success = templateService.purchaseTemplate(currentUserId, templateId);
        return Result.success(success);
    }

    /**
     * 检查用户是否已购买模板
     */
    @GetMapping("/check-purchase/{templateId}")
    public Result<Boolean> checkPurchase(@PathVariable Long templateId) {
        Long currentUserId = SecurityUtils.getCurrentUserId();
        boolean purchased = templateService.hasUserPurchasedTemplate(currentUserId, templateId);
        return Result.success(purchased);
    }

    /**
     * 获取用户已购买的模板列表
     */
    @GetMapping("/purchased")
    public Result<Page<SysTemplate>> getUserPurchasedTemplates(
            @RequestParam(defaultValue = "1") int page,
            @RequestParam(defaultValue = "10") int size) {

        Long currentUserId = SecurityUtils.getCurrentUserId();
        Page<SysTemplate> templatePage = templateService.getUserPurchasedTemplates(currentUserId, page, size);
        return Result.success(templatePage);
    }

    /**
     * 获取用户已购买的模板列表List
     */
    @GetMapping("/purchased/all")
    public Result<List<SysTemplateBo>> getUserPurchasedTemplates() {
        Long currentUserId = SecurityUtils.getCurrentUserId();
        List<SysTemplateBo> templateList = templateService.getlistUserPurchasedTemplates(currentUserId);
        return Result.success(templateList);
    }
}
